home *** CD-ROM | disk | FTP | other *** search
/ Multimedia Toolkit / Multimedia Toolkit.iso / pascal / biosvide.pas < prev    next >
Pascal/Delphi Source File  |  1993-03-10  |  9KB  |  404 lines

  1. {****************************************************************************}
  2. {                                                                            }
  3. { MODULE:         BiosVideo                                                  }
  4. {                                                                            }
  5. { DESCRIPTION:    Provides access to all the BIOS video services.            }
  6. {                                                                            }
  7. { AUTHOR:         Juan Carlos Arévalo                                        }
  8. {                                                                            }
  9. { MODIFICATIONS:  Nobody (yet ;-)                                            }
  10. {                                                                            }
  11. { HISTORY:        19-Dec-1992 Creation.                                      }
  12. {                                                                            }
  13. { (C) 1992 VangeliSTeam                                                      }
  14. {____________________________________________________________________________}
  15.  
  16.  
  17. UNIT BiosVideo;
  18.  
  19. INTERFACE
  20.  
  21. TYPE
  22.   TVideoStateSaved =
  23.     RECORD
  24.       Mode     : BYTE;
  25.       FontSize : BYTE;
  26.       Buffer   : POINTER;
  27.     END;
  28.  
  29.  
  30.  
  31.  
  32. PROCEDURE SaveVideoState      (VAR Buffer: TVideoStateSaved);
  33. PROCEDURE RestoreVideoState   (VAR Buffer: TVideoStateSaved);
  34. PROCEDURE SetVideoMode        (Mode: BYTE);
  35. FUNCTION  GetVideoMode                      : BYTE;
  36. PROCEDURE ForceEGAMode;
  37.                              
  38. PROCEDURE SelectFont8x8       (Font: BYTE);         
  39. PROCEDURE SelectFont8x14      (Font: BYTE);         
  40. PROCEDURE SelectFont8x16      (Font: BYTE);         
  41. PROCEDURE SelectFontQuiet8x8  (Font: BYTE);         
  42. PROCEDURE SelectFontQuiet8x14 (Font: BYTE);         
  43. PROCEDURE SelectFontQuiet8x16 (Font: BYTE);         
  44. PROCEDURE FillFont            (Font: BYTE; First: CHAR; NChars: WORD;
  45.                                Size: BYTE; Data: POINTER); 
  46. PROCEDURE SelectFonts         (FontDim, FontBright: BYTE); 
  47.  
  48. PROCEDURE NoCursor;                                        
  49. PROCEDURE UnderCursor;                                     
  50. PROCEDURE BlockCursor;                                     
  51. PROCEDURE SetCursor           (x, y: BYTE; Page: BYTE); 
  52.  
  53. PROCEDURE BlinkOff;                                        
  54. PROCEDURE SetPalette          (Palette: POINTER);
  55.  
  56. PROCEDURE SetVideoPage        (Page: BYTE);             
  57.  
  58. PROCEDURE FillVideoMemory     (Chr: CHAR; Attr: BYTE);  
  59.  
  60.  
  61.  
  62.  
  63. IMPLEMENTATION
  64.  
  65.  
  66.  
  67.  
  68. {----------------------------------------------------------------------------}
  69. { Video mode services.                                                       }
  70. {____________________________________________________________________________}
  71.  
  72.  
  73. PROCEDURE SaveVideoState(VAR Buffer: TVideoStateSaved);
  74.   VAR
  75.     FSize : WORD ABSOLUTE 0:$485;
  76.   BEGIN
  77.  
  78.     Buffer.FontSize := FSize;
  79.     Buffer.Mode     := GetVideoMode;
  80.  
  81.     ASM
  82.  
  83.         MOV     CX,$07
  84.         LES     BX,[Buffer]
  85.         LES     BX,TVideoStateSaved([ES:BX]).Buffer
  86.  
  87.         MOV     AX,$1C01
  88.         INT     $10
  89.  
  90.     END;
  91.  
  92.   END;
  93.  
  94.  
  95. PROCEDURE RestoreVideoState(VAR Buffer: TVideoStateSaved);
  96.   BEGIN
  97.  
  98.     SetVideoMode(Buffer.Mode);
  99.     CASE Buffer.FontSize OF
  100.        8 : SelectFont8x8(0);
  101.       14 : SelectFont8x14(0);
  102.       16 : SelectFont8x16(0);
  103.     ELSE
  104.       SelectFont8x16(0);
  105.     END;
  106.  
  107.     ASM
  108.  
  109.         MOV     CX,$07
  110.         LES     BX,[Buffer]
  111.         LES     BX,TVideoStateSaved([ES:BX]).Buffer
  112.  
  113.         MOV     AX,$1C02
  114.         INT     $10
  115.  
  116.     END;
  117.  
  118.   END;
  119.  
  120.  
  121. PROCEDURE SetVideoMode(Mode: BYTE); ASSEMBLER;
  122.   ASM
  123.  
  124.         MOV     AL,Mode
  125.  
  126.         XOR     AH,AH
  127.         INT     $10
  128.  
  129.   END;
  130.  
  131.  
  132. FUNCTION GetVideoMode : BYTE; ASSEMBLER;
  133.   ASM
  134.  
  135.         MOV     AH,$F
  136.         INT     $10
  137.  
  138.         AND     AL,$7F
  139.  
  140.   END;
  141.  
  142.  
  143. PROCEDURE ForceEGAMode; ASSEMBLER;
  144.   ASM
  145.  
  146.         MOV     BL,$30   { en vez de 9x8, que no sirve para hacer gráficos bien. }
  147.  
  148.         MOV     AX,$1201 { 350 líneas (EGA) para que los caracteres tengan 8X8   }
  149.         INT     $10
  150.  
  151.   END;
  152.  
  153.  
  154.  
  155.  
  156. {----------------------------------------------------------------------------}
  157. { Font services.                                                             }
  158. {____________________________________________________________________________}
  159.  
  160.  
  161. PROCEDURE SelectFont8x8(Font: BYTE); ASSEMBLER;
  162.   ASM
  163.  
  164.         MOV     BL,Font
  165.  
  166.         MOV     AX,$1112 
  167.         INT     $10
  168.  
  169.   END;
  170.  
  171.  
  172. PROCEDURE SelectFont8x14(Font: BYTE); ASSEMBLER;
  173.   ASM
  174.  
  175.         MOV     BL,Font
  176.  
  177.         MOV     AX,$1111
  178.         INT     $10
  179.  
  180.   END;
  181.  
  182.  
  183. PROCEDURE SelectFont8x16(Font: BYTE); ASSEMBLER;
  184.   ASM
  185.  
  186.         MOV     BL,Font
  187.  
  188.         MOV     AX,$1114
  189.         INT     $10
  190.  
  191.   END;
  192.  
  193.  
  194. PROCEDURE SelectFontQuiet8x8(Font: BYTE); ASSEMBLER;
  195.   ASM
  196.  
  197.         MOV     BL,Font
  198.  
  199.         MOV     AX,$1102
  200.         INT     $10
  201.  
  202.   END;
  203.  
  204.  
  205. PROCEDURE SelectFontQuiet8x14(Font: BYTE); ASSEMBLER;
  206.   ASM
  207.  
  208.         MOV     BL,Font
  209.  
  210.         MOV     AX,$1101
  211.         INT     $10
  212.  
  213.   END;
  214.  
  215.  
  216. PROCEDURE SelectFontQuiet8x16(Font: BYTE); ASSEMBLER;
  217.   ASM
  218.  
  219.         MOV     BL,Font
  220.  
  221.         MOV     AX,$1104
  222.         INT     $10
  223.  
  224.   END;
  225.  
  226.  
  227. PROCEDURE FillFont(Font: BYTE; First: CHAR; NChars: WORD;
  228.                    Size: BYTE; Data: POINTER); ASSEMBLER;
  229.   ASM
  230.  
  231.         PUSH    BP       { Rellena el segundo font }
  232.  
  233.         MOV     BL,Font
  234.         MOV     BH,Size
  235.         MOV     CX,NChars
  236.         MOV     DL,First
  237.         XOR     DH,DH
  238.         LES     BP,Data
  239.  
  240.         MOV     AX,$1110
  241.         INT     $10
  242.  
  243.         POP     BP
  244.  
  245.   END;
  246.  
  247.  
  248. PROCEDURE SelectFonts(FontDim, FontBright: BYTE); ASSEMBLER;
  249.   ASM
  250.  
  251.         MOV     AL,FontDim
  252.         MOV     BL,AL
  253.         AND     AL,100b
  254.         SHL     AL,2
  255.         AND     BL,11b
  256.         OR      BL,AL
  257.         MOV     AL,FontBright
  258.         MOV     AH,AL
  259.         AND     AL,100b
  260.         SHL     AL,3
  261.         OR      BL,AL
  262.         AND     AH,11b
  263.         SHL     AH,2
  264.         OR      BL,AH
  265.  
  266.         MOV     AX,$1103     { Activa los dos fonts }
  267.         INT     $10
  268.  
  269.   END;
  270.  
  271.  
  272.  
  273.  
  274. {----------------------------------------------------------------------------}
  275. { Text cursor services.                                                      }
  276. {____________________________________________________________________________}
  277.  
  278.  
  279. PROCEDURE NoCursor; ASSEMBLER;
  280.   ASM
  281.  
  282.         MOV     CX,$700
  283.  
  284.         MOV     AH,1     
  285.         INT     $10
  286.  
  287.   END;
  288.  
  289.  
  290. PROCEDURE UnderCursor; ASSEMBLER;
  291.   ASM
  292.  
  293.         MOV     CX,$607
  294.  
  295.         MOV     AH,1     
  296.         INT     $10
  297.  
  298.   END;
  299.  
  300.  
  301. PROCEDURE BlockCursor; ASSEMBLER;
  302.   ASM
  303.  
  304.         MOV     CX,$007
  305.  
  306.         MOV     AH,1     
  307.         INT     $10
  308.  
  309.   END;
  310.  
  311.  
  312. PROCEDURE SetCursor(x, y: BYTE; Page: BYTE); ASSEMBLER;
  313.   ASM
  314.  
  315.         MOV     DH,y
  316.         MOV     DL,x
  317.         MOV     BH,Page
  318.  
  319.         MOV     AH,2
  320.         INT     $10
  321.  
  322.   END;
  323.  
  324.  
  325.  
  326.  
  327. {----------------------------------------------------------------------------}
  328. { Attribute services.                                                        }
  329. {____________________________________________________________________________}
  330.  
  331.  
  332. PROCEDURE BlinkOff; ASSEMBLER;
  333.   ASM
  334.  
  335.         XOR     AX,AX
  336.         MOV     ES,AX
  337.         MOV     AL,[ES:$465]
  338.         AND     AL,11011111b
  339.         MOV     DX,$3D8
  340.         OUT     DX,AL
  341. (*
  342.         MOV     AX,$1003 { Quita parpadeo }
  343.  
  344.         MOV     BH,1
  345.         INT     $10
  346. *)
  347.   END;
  348.  
  349.  
  350. PROCEDURE SetPalette(Palette: POINTER); ASSEMBLER;
  351.   ASM
  352.  
  353.         LES     DX,Palette 
  354.  
  355.         MOV     AX,$1002
  356.         INT     $10
  357.  
  358.   END;
  359.  
  360.  
  361.  
  362.  
  363. {----------------------------------------------------------------------------}
  364. { Miscellaneous services.                                                    }
  365. {____________________________________________________________________________}
  366.  
  367.  
  368. PROCEDURE SetVideoPage(Page: BYTE); ASSEMBLER;
  369.   ASM
  370.  
  371.         MOV     AL,Page
  372.  
  373.         MOV     AH,$05
  374.         INT     $10
  375.  
  376.   END;
  377.  
  378.  
  379.  
  380.  
  381. {----------------------------------------------------------------------------}
  382. { Miscellaneous routines.                                                    }
  383. {____________________________________________________________________________}
  384.  
  385.  
  386. PROCEDURE FillVideoMemory(Chr: CHAR; Attr: BYTE); ASSEMBLER;
  387.   ASM
  388.  
  389.         CLD
  390.         MOV     DI,0  
  391.         MOV     AX,$B800
  392.         MOV     ES,AX
  393.         MOV     CX,$4000
  394.         MOV     AH,Attr
  395.         MOV     AL,Chr
  396.         REP STOSW
  397.  
  398.   END;
  399.  
  400.  
  401.  
  402.  
  403. END.
  404.